package com.example.qa.adapter.in.web.controller;

import com.example.qa.adapter.in.web.dto.CreateqaRequestDTO;
import com.example.qa.adapter.in.web.dto.UpdateqaRequestDTO;
import com.example.qa.adapter.in.web.dto.qaResponseDTO;
import com.example.qa.service.application.command.CreateqaCommand;
import com.example.qa.service.application.command.UpdateqaCommand;
import com.example.qa.service.application.port.in.*;
import com.example.qa.service.domain.qa;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RequestMapping("/qas")
@RestController
@RequiredArgsConstructor
public class qaController {

    private final GetqaListUseCase getqaListUseCase;
    private final CreateqaUseCase createqaUseCase;
    private final DeleteqaUseCase deleteqaUseCase;
    private final UpdateqaUseCase updateqaUseCase;
    private final GetqaByIdUseCase getqaByIdUseCase;

    @GetMapping("")
    public List<qa> getqas() {
        log.info("getqas");
        return getqaListUseCase.getqas();
    }

    @PostMapping()
    public qa createqa(@RequestBody CreateqaRequestDTO createqaRequestDTO){

        CreateqaCommand command=CreateqaCommand.builder()
                .name(createqaRequestDTO.name())
                .age(createqaRequestDTO.age())
                .email(createqaRequestDTO.email())
                .build();

        return createqaUseCase.createqa(command);
    }


    @DeleteMapping("{id}")
    public String deleteqa(@PathVariable("id") Long id){
        deleteqaUseCase.deleteqa(id);
        return "success";
    }

    /**
     * @author liuxin
     * @param updateqaRequestDTO
     * @return
     */
    @PutMapping("")
    public qa updateqa(@RequestBody UpdateqaRequestDTO updateqaRequestDTO){
        UpdateqaCommand command=UpdateqaCommand.builder()
                .id(updateqaRequestDTO.id())
                .name(updateqaRequestDTO.name())
                .age(updateqaRequestDTO.age())
                .email(updateqaRequestDTO.email())
                .build();
        qa qa = updateqaUseCase.updateqa(command);
        return qa;
    }


    /**
     * @author dengli
     * @param id
     * @return
     */
    @GetMapping("{id}")
    public qaResponseDTO getqaById(@PathVariable("id") Long id){
        qa qa = getqaByIdUseCase.getqaById(id);
        qaResponseDTO qaResponseDTO = new qaResponseDTO(
                qa.getId().id(),
                qa.getName().qaname(),
                qa.getAge().age(),
                qa.getEmail().email());
        return qaResponseDTO;
    }
}
